/*
 * PyGeoManager.cpp
 *
 *  Created on: Dec 28, 2011
 *      Author: allan
 */

#include "PyGeoManager.h"

// GeoReact includes
#include <GeoReact.h>

// Boost includes
#include <boost/python.hpp>
using namespace boost::python;

void export_GeoManager()
{
	class_<GeoManager>("GeoManager")
		.def(init<>())
		
		.add_property("aqueous_species", 
			&GeoManager::GetAqueousSpecies, 
			&GeoManager::SetAqueousSpecies)
		
		.add_property("gaseous_species", 
			&GeoManager::GetGaseousSpecies, 
			&GeoManager::SetGaseousSpecies)
		
		.add_property("mineral_species", 
			&GeoManager::GetMineralSpecies, 
			&GeoManager::SetMineralSpecies)
			
		.def("RegisterKinetics",
			&GeoManager::RegisterKinetics)
			
		.def("CreateMultiphase",
			&GeoManager::CreateMultiphase)
		
		.def("CreateEquilibriumSystem",
			&GeoManager::CreateEquilibriumSystem)
		
		.def("CreateKineticSystem",
			&GeoManager::CreateKineticSystem)
		
		.def("CreateGeoState",
			&GeoManager::CreateGeoState)
		
		.def("CreateGeoEquilibrator",
			&GeoManager::CreateGeoEquilibrator)
		
		.def("CreateGeoReactor",
			&GeoManager::CreateGeoReactor);
	
	implicitly_convertible<GeoManager, Multiphase>();
	implicitly_convertible<GeoManager, EquilibriumSystem>();
	implicitly_convertible<GeoManager, KineticSystem>();
	implicitly_convertible<KineticSystem, GeoState>();
	implicitly_convertible<EquilibriumSystem, GeoEquilibrator>();
	implicitly_convertible<KineticSystem, GeoReactor>();
}
